#include "MsgUtils.h"
#include "Base64.h"

using namespace red::protocolo::mensajes;

string MsgUtils::strReemplazar(const string &p_sOrigen,
	string p_sReemplazando, string p_sReemplazador) {

	string t_s = p_sOrigen;
	unsigned int t_w = t_s.find(p_sReemplazando);

	while (t_w < string::npos) {
		t_s.erase(t_w, p_sReemplazando.length());
		t_s.insert(t_w, p_sReemplazador);
		t_w = t_s.find(p_sReemplazando);
	}

	return t_s;
}

string MsgUtils::strCodificarBase64(const string &p_sOrigen) {
	return Base64::encode(p_sOrigen);
}

string MsgUtils::strDecodificarBase64(const string &p_sOrigen) {
	return Base64::decode(p_sOrigen);
}

string MsgUtils::strCodificarCarsEsps(const string &p_sOrigen) {
	return this->strCodificarLT(this->strCodificarGT(
		this->strCodificarND(this->strCodificarQT(p_sOrigen))));
}

string MsgUtils::strDecodificarCarsEsps(const string &p_sOrigen) {
	return this->strDecodificarLT(this->strDecodificarGT(
		this->strDecodificarND(this->strDecodificarQT(p_sOrigen))));
}

string MsgUtils::strCodificarLT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, "<", ",;[h7h:3(g2%h9;");
}

string MsgUtils::strDecodificarLT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, ",;[h7h:3(g2%h9;", "<");
}

string MsgUtils::strCodificarGT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, ">", ",;[h7h:3(g2%h8;");
}

string MsgUtils::strDecodificarGT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, ",;[h7h:3(g2%h8;", ">");
}

string MsgUtils::strCodificarND(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, "&", ",;[h7h:3(g2%h7;");
}

string MsgUtils::strDecodificarND(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, ",;[h7h:3(g2%h7;", "&");
}

string MsgUtils::strCodificarQT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, "\"", ",;[h7h:3(g2%h6;");
}

string MsgUtils::strDecodificarQT(const string &p_sOrigen) {
	return strReemplazar(p_sOrigen, ",;[h7h:3(g2%h6;", "\"");
}

